package com.lj.file.service;

import com.lj.file.param.InitChunkUploadParam;
import com.lj.file.param.UploadParam;
import com.lj.file.result.FileDetailInfoResult;
import com.lj.file.result.PlatformInfoResult;
import org.dromara.x.file.storage.core.upload.FilePartInfo;

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.List;

/**
 * @author luojing
 * @since 2025/7/7 11:14
 */
public interface FileService {

    /**
     * @return 获取目前支持的平台信息
     */
    List<PlatformInfoResult> platformInfo();

    /**
     * 上传
     *
     * @param param 上传参数
     * @return 上传结果
     */
    FileDetailInfoResult upload(UploadParam param) throws IOException;

    /**
     * 初始化分片上传
     */
    FileDetailInfoResult initChunkUpload(InitChunkUploadParam param);

    /**
     * 分片上传
     *
     * @param inputStream 分片输入流
     * @param chunkNumber 当前分片序号
     * @param fileId      文件id 就是初始化时的主键id
     */
    FilePartInfo chunkUpload(InputStream inputStream, int chunkNumber, Long fileId) throws IOException;

    /**
     * 下载文件到流中
     *
     * @param id           文件id
     * @param outputStream 输出流
     */
    void download(Long id, OutputStream outputStream);

    void delete(List<Long> ids);

    /**
     * 分片取消上传
     *
     * @param fileId 文件id 就是初始化时的主键id
     */
    void chunkAbort(Long fileId);
}
